public class Sort {
    public static void doSort(int[] arr) {
        // 空数组 或 只有一个元素的数组，则什么都不做。
        if (arr == null || arr.length == 1) return;
 
        // 外层循环表示趟数。
        for (int i = 0; i < arr.length - 1; i++) {
 
            // 默认有序，如果发生交换说明无序。
            boolean isSorted = true;
 
            // j 表示 要比较元素对的第一个。
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 不能写 >= ，否则不稳定。
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    // 发生交换了，说明无序。
                    isSorted = false;
                }
            }
 
            // 如果没有发生交换，则数组已经有序，结束冒泡。
            if (isSorted)   return;
 
            // 把每一趟排序的结果也输出一下。
            System.out.print("第 "+ (i+1) + " 趟: ");
            print(arr);
        }
    }
 
    public static void main(String[] args) {
        int[] arr = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
 
        System.out.print("排序前:  ");
        print(arr);
 
        doSort(arr);
 
        System.out.print("排序后:  ");
        print(arr);
    }
 
    // 打印数组
    public static void print(int[] arr) {
        if (arr == null)    return;
 
        for(int i : arr) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}
